{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "64171620",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyspark import SparkContext"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d314c4d4",
   "metadata": {},
   "source": [
    "## spark上下文"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2e56571b",
   "metadata": {},
   "outputs": [],
   "source": [
    "sc = SparkContext(\"local\",\"app\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cebfbfea",
   "metadata": {},
   "source": [
    "## 加载数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "10f1c052",
   "metadata": {},
   "outputs": [],
   "source": [
    "book=sc.textFile(\"file:///home/demos/实验数据/book.txt\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4e89cc47",
   "metadata": {},
   "source": [
    "## 查看前5项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4e050420",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['序号,书名,评分,价格,出版社,url',\n",
       " '5173,動力取向精神醫學--臨床應用與實務,10.0 ,1200元,心灵工坊,https://book.douban.com/subject/6053667/',\n",
       " '9929,水彩绘森活,10.0 ,29.8,人民邮电出版社,https://book.douban.com/subject/26115807/',\n",
       " '10124,殷周金文集成(修订增补本共8册)(精),10.0 ,2400.00元,中华书局,https://book.douban.com/subject/2235855/',\n",
       " '16628,纸雕游戏大书,10.0 ,99.00元,重庆出版集团,https://book.douban.com/subject/26673804/']"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "book.take(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "11bfb725",
   "metadata": {},
   "source": [
    "## 查看book的类型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "649a7656",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pyspark.rdd.RDD"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(book)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0661063d",
   "metadata": {},
   "source": [
    "## 定义schema"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b4d68932",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyspark.sql import Row"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9b89e645",
   "metadata": {},
   "source": [
    "## 定义之前将book的头部删除"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "56958e1e",
   "metadata": {},
   "outputs": [],
   "source": [
    "header = book.first()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "1a593f02",
   "metadata": {},
   "outputs": [],
   "source": [
    "book = book.filter(lambda row:row!=header)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "f7276ea1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'5173,動力取向精神醫學--臨床應用與實務,10.0 ,1200元,心灵工坊,https://book.douban.com/subject/6053667/'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "book.first()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "ff5bdbf7",
   "metadata": {},
   "outputs": [],
   "source": [
    "book_rows=book.map(lambda x:x.split(\",\")).map(lambda x:Row(id=x[0],name=x[1],rating=x[2],price=x[3],publish=x[4],url=x[5]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "c265bb44",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Row(id='5173', name='動力取向精神醫學--臨床應用與實務', rating='10.0 ', price='1200元', publish='心灵工坊', url='https://book.douban.com/subject/6053667/'),\n",
       " Row(id='9929', name='水彩绘森活', rating='10.0 ', price='29.8', publish='人民邮电出版社', url='https://book.douban.com/subject/26115807/'),\n",
       " Row(id='10124', name='殷周金文集成(修订增补本共8册)(精)', rating='10.0 ', price='2400.00元', publish='中华书局', url='https://book.douban.com/subject/2235855/'),\n",
       " Row(id='16628', name='纸雕游戏大书', rating='10.0 ', price='99.00元', publish='重庆出版集团', url='https://book.douban.com/subject/26673804/'),\n",
       " Row(id='19103', name='Michelangelo', rating='10.0 ', price='$200.00 ', publish='Taschen', url='https://book.douban.com/subject/2342660/')]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "book_rows.take(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "bc03ba3d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pyspark.sql import SparkSession"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "66afb04f",
   "metadata": {},
   "outputs": [],
   "source": [
    "sqlContext = SparkSession.builder.getOrCreate()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7deeaf43",
   "metadata": {},
   "outputs": [],
   "source": [
    "book_df = sqlContext.createDataFrame(book_rows)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4eee96b8",
   "metadata": {},
   "source": [
    "## DataFrame中提供了详细的数据结构信息，从而使得SparkSQL可以清楚地知道该数据集中包含哪些列，每列的名称和类型各是什么，DataFrame中的数据结构信息，即为schema."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "fda2f6a3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "root\n",
      " |-- id: string (nullable = true)\n",
      " |-- name: string (nullable = true)\n",
      " |-- rating: string (nullable = true)\n",
      " |-- price: string (nullable = true)\n",
      " |-- publish: string (nullable = true)\n",
      " |-- url: string (nullable = true)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "book_df.printSchema()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "4c7c23c1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+-----+---------------------------------+------+---------+--------------+--------------------+\n",
      "|   id|                             name|rating|    price|       publish|                 url|\n",
      "+-----+---------------------------------+------+---------+--------------+--------------------+\n",
      "| 5173| 動力取向精神醫學--臨床應用與實務| 10.0 |   1200元|      心灵工坊|https://book.doub...|\n",
      "| 9929|                       水彩绘森活| 10.0 |     29.8|人民邮电出版社|https://book.doub...|\n",
      "|10124|殷周金文集成(修订增补本共8册)(精)| 10.0 |2400.00元|      中华书局|https://book.doub...|\n",
      "|16628|                     纸雕游戏大书| 10.0 |  99.00元|  重庆出版集团|https://book.doub...|\n",
      "|19103|                     Michelangelo| 10.0 | $200.00 |       Taschen|https://book.doub...|\n",
      "+-----+---------------------------------+------+---------+--------------+--------------------+\n",
      "only showing top 5 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "book_df.show(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c385d5ab",
   "metadata": {},
   "source": [
    "# 使用spark sql"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4f4964f9",
   "metadata": {},
   "source": [
    "## 注册表名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "f5694720",
   "metadata": {},
   "outputs": [],
   "source": [
    "book_df.registerTempTable(\"book_table\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67aa42d1",
   "metadata": {},
   "source": [
    "## 使用sql语句查看数据项"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "f0515c3e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+------+\n",
      "|counts|\n",
      "+------+\n",
      "| 54350|\n",
      "+------+\n",
      "\n"
     ]
    }
   ],
   "source": [
    "sqlContext.sql(\"select count(*) counts from book_table\").show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "759b736f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+-----+-----------------------------------+------+---------+------------------+--------------------+\n",
      "|   id|                               name|rating|    price|           publish|                 url|\n",
      "+-----+-----------------------------------+------+---------+------------------+--------------------+\n",
      "| 5173|   動力取向精神醫學--臨床應用與實務| 10.0 |   1200元|          心灵工坊|https://book.doub...|\n",
      "| 9929|                         水彩绘森活| 10.0 |     29.8|    人民邮电出版社|https://book.doub...|\n",
      "|10124|  殷周金文集成(修订增补本共8册)(精)| 10.0 |2400.00元|          中华书局|https://book.doub...|\n",
      "|16628|                       纸雕游戏大书| 10.0 |  99.00元|      重庆出版集团|https://book.doub...|\n",
      "|19103|                       Michelangelo| 10.0 | $200.00 |           Taschen|https://book.doub...|\n",
      "|20063|                  一支笔的快乐涂鸦2| 10.0 |     29.8|    人民邮电出版社|https://book.doub...|\n",
      "|32781|                         亲亲宝贝装| 10.0 |  28.00元|江西科学技术出版社|https://book.doub...|\n",
      "|32879|                     Photoshop7解像| 10.0 |  68.00元|        海洋出版社|https://book.doub...|\n",
      "|45687|                   戚蓼生序本石头记| 10.0 | 350.00元|    人民文学出版社|https://book.doub...|\n",
      "|52504|                      宇宙兄弟（7）| 10.0 |   JPY580|            講談社|https://book.doub...|\n",
      "|52505|                      宇宙兄弟（8）| 10.0 |   JPY580|            講談社|https://book.doub...|\n",
      "|  573|            TCP\\IP详解（卷1英文版）|  9.9 |       45|    机械工业出版社|https://book.doub...|\n",
      "|  589|计算机程序设计艺术卷1：基本算法(...|  9.9 | 119.00元|    人民邮电出版社|https://book.doub...|\n",
      "| 5522|         微积分和数学分析引论-第1卷|  9.9 |  79.00元|  世界图书出版公司|https://book.doub...|\n",
      "| 5547|               PrinciplesofNeura...|  9.9 | $103.41 |McGraw-HillMedical|https://book.doub...|\n",
      "| 7443|           奈特人体神经解剖彩色图谱|  9.9 | 138.00元|    人民卫生出版社|https://book.doub...|\n",
      "| 8703|                 数学、科学和认识论|  9.9 |  32.00元|        商务印书馆|https://book.doub...|\n",
      "| 9924|                       零基础学素描|  9.9 |     20元|    人民邮电出版社|https://book.doub...|\n",
      "| 9926|     黑白花意3：300例超写实的花之绘|  9.9 |  29.80元|    人民邮电出版社|https://book.doub...|\n",
      "| 9927|         黑白画意：经典植物手绘教程|  9.9 |  29.80元|    人民邮电出版社|https://book.doub...|\n",
      "+-----+-----------------------------------+------+---------+------------------+--------------------+\n",
      "only showing top 20 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "sqlContext.sql(\"select * from book_table\").show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "efee7f7a",
   "metadata": {},
   "source": [
    "## 使用DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "84573465",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+------+\n",
      "|rating|\n",
      "+------+\n",
      "| 10.0 |\n",
      "| 10.0 |\n",
      "| 10.0 |\n",
      "| 10.0 |\n",
      "| 10.0 |\n",
      "+------+\n",
      "only showing top 5 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "book_df.select('rating').show(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "40d6f7e5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+-----+---------------------------------+\n",
      "|   id|                             name|\n",
      "+-----+---------------------------------+\n",
      "| 5173| 動力取向精神醫學--臨床應用與實務|\n",
      "| 9929|                       水彩绘森活|\n",
      "|10124|殷周金文集成(修订增补本共8册)(精)|\n",
      "|16628|                     纸雕游戏大书|\n",
      "|19103|                     Michelangelo|\n",
      "+-----+---------------------------------+\n",
      "only showing top 5 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "book_df.select('id','name').show(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "38e802c6",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+-----+---------------------------------+------+---------+--------------+--------------------+\n",
      "|   id|                             name|rating|    price|       publish|                 url|\n",
      "+-----+---------------------------------+------+---------+--------------+--------------------+\n",
      "| 5173| 動力取向精神醫學--臨床應用與實務| 10.0 |   1200元|      心灵工坊|https://book.doub...|\n",
      "| 9929|                       水彩绘森活| 10.0 |     29.8|人民邮电出版社|https://book.doub...|\n",
      "|10124|殷周金文集成(修订增补本共8册)(精)| 10.0 |2400.00元|      中华书局|https://book.doub...|\n",
      "|16628|                     纸雕游戏大书| 10.0 |  99.00元|  重庆出版集团|https://book.doub...|\n",
      "|19103|                     Michelangelo| 10.0 | $200.00 |       Taschen|https://book.doub...|\n",
      "+-----+---------------------------------+------+---------+--------------+--------------------+\n",
      "only showing top 5 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "book_df.filter(book_df['rating']>8).show(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3167382a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+--------------------+-----+\n",
      "|             publish|count|\n",
      "+--------------------+-----+\n",
      "|         SearchPress|    3|\n",
      "|McGraw-HillScienc...|    6|\n",
      "|            上海教育|    5|\n",
      "|ScholasticPaperbacks|    2|\n",
      "|                 DAW|    1|\n",
      "|         PanBooksLtd|    1|\n",
      "|  奇幻基地出版事業部|    1|\n",
      "|               Ember|    1|\n",
      "|         Allyn&Bacon|    1|\n",
      "|     WalkerArtCenter|    1|\n",
      "+--------------------+-----+\n",
      "only showing top 10 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "book_df.groupBy('publish').count().show(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "2de542a0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "+------+-----+\n",
      "|rating|count|\n",
      "+------+-----+\n",
      "|  9.3 | 1472|\n",
      "|  8.9 | 2879|\n",
      "|  8.0 | 4298|\n",
      "|  9.0 | 2552|\n",
      "|  8.8 | 3045|\n",
      "|  9.4 | 1129|\n",
      "|  9.8 |  152|\n",
      "|  9.6 |  577|\n",
      "|  9.2 | 1815|\n",
      "|  8.4 | 4160|\n",
      "|  9.7 |  332|\n",
      "| 10.0 |   11|\n",
      "|  7.9 | 4206|\n",
      "|  8.6 | 3949|\n",
      "|  9.9 |   68|\n",
      "+------+-----+\n",
      "only showing top 15 rows\n",
      "\n"
     ]
    }
   ],
   "source": [
    "book_df.groupBy('rating').count().show(15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "beb627b4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['__class__',\n",
       " '__delattr__',\n",
       " '__dict__',\n",
       " '__dir__',\n",
       " '__doc__',\n",
       " '__eq__',\n",
       " '__format__',\n",
       " '__ge__',\n",
       " '__getattr__',\n",
       " '__getattribute__',\n",
       " '__getitem__',\n",
       " '__gt__',\n",
       " '__hash__',\n",
       " '__init__',\n",
       " '__init_subclass__',\n",
       " '__le__',\n",
       " '__lt__',\n",
       " '__module__',\n",
       " '__ne__',\n",
       " '__new__',\n",
       " '__reduce__',\n",
       " '__reduce_ex__',\n",
       " '__repr__',\n",
       " '__setattr__',\n",
       " '__sizeof__',\n",
       " '__str__',\n",
       " '__subclasshook__',\n",
       " '__weakref__',\n",
       " '_collect_as_arrow',\n",
       " '_jcols',\n",
       " '_jdf',\n",
       " '_jmap',\n",
       " '_jseq',\n",
       " '_lazy_rdd',\n",
       " '_repr_html_',\n",
       " '_sc',\n",
       " '_schema',\n",
       " '_sort_cols',\n",
       " '_support_repr_html',\n",
       " '_to_corrected_pandas_type',\n",
       " 'agg',\n",
       " 'alias',\n",
       " 'approxQuantile',\n",
       " 'cache',\n",
       " 'checkpoint',\n",
       " 'coalesce',\n",
       " 'colRegex',\n",
       " 'collect',\n",
       " 'columns',\n",
       " 'corr',\n",
       " 'count',\n",
       " 'cov',\n",
       " 'createGlobalTempView',\n",
       " 'createOrReplaceGlobalTempView',\n",
       " 'createOrReplaceTempView',\n",
       " 'createTempView',\n",
       " 'crossJoin',\n",
       " 'crosstab',\n",
       " 'cube',\n",
       " 'describe',\n",
       " 'distinct',\n",
       " 'drop',\n",
       " 'dropDuplicates',\n",
       " 'drop_duplicates',\n",
       " 'dropna',\n",
       " 'dtypes',\n",
       " 'exceptAll',\n",
       " 'explain',\n",
       " 'fillna',\n",
       " 'filter',\n",
       " 'first',\n",
       " 'foreach',\n",
       " 'foreachPartition',\n",
       " 'freqItems',\n",
       " 'groupBy',\n",
       " 'groupby',\n",
       " 'head',\n",
       " 'hint',\n",
       " 'inputFiles',\n",
       " 'intersect',\n",
       " 'intersectAll',\n",
       " 'isLocal',\n",
       " 'isStreaming',\n",
       " 'is_cached',\n",
       " 'join',\n",
       " 'limit',\n",
       " 'localCheckpoint',\n",
       " 'mapInPandas',\n",
       " 'na',\n",
       " 'orderBy',\n",
       " 'persist',\n",
       " 'printSchema',\n",
       " 'randomSplit',\n",
       " 'rdd',\n",
       " 'registerTempTable',\n",
       " 'repartition',\n",
       " 'repartitionByRange',\n",
       " 'replace',\n",
       " 'rollup',\n",
       " 'sameSemantics',\n",
       " 'sample',\n",
       " 'sampleBy',\n",
       " 'schema',\n",
       " 'select',\n",
       " 'selectExpr',\n",
       " 'semanticHash',\n",
       " 'show',\n",
       " 'sort',\n",
       " 'sortWithinPartitions',\n",
       " 'sql_ctx',\n",
       " 'stat',\n",
       " 'storageLevel',\n",
       " 'subtract',\n",
       " 'summary',\n",
       " 'tail',\n",
       " 'take',\n",
       " 'toDF',\n",
       " 'toJSON',\n",
       " 'toLocalIterator',\n",
       " 'toPandas',\n",
       " 'transform',\n",
       " 'union',\n",
       " 'unionAll',\n",
       " 'unionByName',\n",
       " 'unpersist',\n",
       " 'where',\n",
       " 'withColumn',\n",
       " 'withColumnRenamed',\n",
       " 'withWatermark',\n",
       " 'write',\n",
       " 'writeStream',\n",
       " 'writeTo']"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dir(book_df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "0591a559",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['id', 'name', 'rating', 'price', 'publish', 'url']"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "book_df.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "a4ef36c8",
   "metadata": {},
   "outputs": [],
   "source": [
    "book_pds = book_df.toPandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "21d145cd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>name</th>\n",
       "      <th>rating</th>\n",
       "      <th>price</th>\n",
       "      <th>publish</th>\n",
       "      <th>url</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5173</td>\n",
       "      <td>動力取向精神醫學--臨床應用與實務</td>\n",
       "      <td>10.0</td>\n",
       "      <td>1200元</td>\n",
       "      <td>心灵工坊</td>\n",
       "      <td>https://book.douban.com/subject/6053667/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9929</td>\n",
       "      <td>水彩绘森活</td>\n",
       "      <td>10.0</td>\n",
       "      <td>29.8</td>\n",
       "      <td>人民邮电出版社</td>\n",
       "      <td>https://book.douban.com/subject/26115807/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10124</td>\n",
       "      <td>殷周金文集成(修订增补本共8册)(精)</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2400.00元</td>\n",
       "      <td>中华书局</td>\n",
       "      <td>https://book.douban.com/subject/2235855/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16628</td>\n",
       "      <td>纸雕游戏大书</td>\n",
       "      <td>10.0</td>\n",
       "      <td>99.00元</td>\n",
       "      <td>重庆出版集团</td>\n",
       "      <td>https://book.douban.com/subject/26673804/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>19103</td>\n",
       "      <td>Michelangelo</td>\n",
       "      <td>10.0</td>\n",
       "      <td>$200.00</td>\n",
       "      <td>Taschen</td>\n",
       "      <td>https://book.douban.com/subject/2342660/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54345</th>\n",
       "      <td>55253</td>\n",
       "      <td>天龙八部漫画（第四册）</td>\n",
       "      <td>7.9</td>\n",
       "      <td>10</td>\n",
       "      <td>生活·读书·新知三联书店</td>\n",
       "      <td>https://book.douban.com/subject/1017192/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54346</th>\n",
       "      <td>55256</td>\n",
       "      <td>天龙八部漫画（第二册）</td>\n",
       "      <td>7.9</td>\n",
       "      <td>10</td>\n",
       "      <td>生活·读书·新知三联书店</td>\n",
       "      <td>https://book.douban.com/subject/1026486/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54347</th>\n",
       "      <td>55279</td>\n",
       "      <td>小白杨（1）</td>\n",
       "      <td>7.9</td>\n",
       "      <td>NT240</td>\n",
       "      <td>威向</td>\n",
       "      <td>https://book.douban.com/subject/26326016/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54348</th>\n",
       "      <td>55328</td>\n",
       "      <td>妖刀記32</td>\n",
       "      <td>7.9</td>\n",
       "      <td>180元</td>\n",
       "      <td>河圖文化</td>\n",
       "      <td>https://book.douban.com/subject/25831027/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>54349</th>\n",
       "      <td>55329</td>\n",
       "      <td>妖刀记33</td>\n",
       "      <td>7.9</td>\n",
       "      <td>NTD180</td>\n",
       "      <td>河图文化</td>\n",
       "      <td>https://book.douban.com/subject/25858904/</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>54350 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          id                 name rating     price       publish  \\\n",
       "0       5173    動力取向精神醫學--臨床應用與實務  10.0      1200元          心灵工坊   \n",
       "1       9929                水彩绘森活  10.0       29.8       人民邮电出版社   \n",
       "2      10124  殷周金文集成(修订增补本共8册)(精)  10.0   2400.00元          中华书局   \n",
       "3      16628               纸雕游戏大书  10.0     99.00元        重庆出版集团   \n",
       "4      19103         Michelangelo  10.0   $200.00        Taschen   \n",
       "...      ...                  ...    ...       ...           ...   \n",
       "54345  55253          天龙八部漫画（第四册）   7.9         10  生活·读书·新知三联书店   \n",
       "54346  55256          天龙八部漫画（第二册）   7.9         10  生活·读书·新知三联书店   \n",
       "54347  55279               小白杨（1）   7.9      NT240            威向   \n",
       "54348  55328                妖刀記32   7.9       180元          河圖文化   \n",
       "54349  55329                妖刀记33   7.9     NTD180          河图文化   \n",
       "\n",
       "                                             url  \n",
       "0       https://book.douban.com/subject/6053667/  \n",
       "1      https://book.douban.com/subject/26115807/  \n",
       "2       https://book.douban.com/subject/2235855/  \n",
       "3      https://book.douban.com/subject/26673804/  \n",
       "4       https://book.douban.com/subject/2342660/  \n",
       "...                                          ...  \n",
       "54345   https://book.douban.com/subject/1017192/  \n",
       "54346   https://book.douban.com/subject/1026486/  \n",
       "54347  https://book.douban.com/subject/26326016/  \n",
       "54348  https://book.douban.com/subject/25831027/  \n",
       "54349  https://book.douban.com/subject/25858904/  \n",
       "\n",
       "[54350 rows x 6 columns]"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "book_pds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "c3c67488",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>name</th>\n",
       "      <th>rating</th>\n",
       "      <th>price</th>\n",
       "      <th>publish</th>\n",
       "      <th>url</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5173</td>\n",
       "      <td>動力取向精神醫學--臨床應用與實務</td>\n",
       "      <td>10.0</td>\n",
       "      <td>1200元</td>\n",
       "      <td>心灵工坊</td>\n",
       "      <td>https://book.douban.com/subject/6053667/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>9929</td>\n",
       "      <td>水彩绘森活</td>\n",
       "      <td>10.0</td>\n",
       "      <td>29.8</td>\n",
       "      <td>人民邮电出版社</td>\n",
       "      <td>https://book.douban.com/subject/26115807/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10124</td>\n",
       "      <td>殷周金文集成(修订增补本共8册)(精)</td>\n",
       "      <td>10.0</td>\n",
       "      <td>2400.00元</td>\n",
       "      <td>中华书局</td>\n",
       "      <td>https://book.douban.com/subject/2235855/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>16628</td>\n",
       "      <td>纸雕游戏大书</td>\n",
       "      <td>10.0</td>\n",
       "      <td>99.00元</td>\n",
       "      <td>重庆出版集团</td>\n",
       "      <td>https://book.douban.com/subject/26673804/</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>19103</td>\n",
       "      <td>Michelangelo</td>\n",
       "      <td>10.0</td>\n",
       "      <td>$200.00</td>\n",
       "      <td>Taschen</td>\n",
       "      <td>https://book.douban.com/subject/2342660/</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id                 name rating     price  publish  \\\n",
       "0   5173    動力取向精神醫學--臨床應用與實務  10.0      1200元     心灵工坊   \n",
       "1   9929                水彩绘森活  10.0       29.8  人民邮电出版社   \n",
       "2  10124  殷周金文集成(修订增补本共8册)(精)  10.0   2400.00元     中华书局   \n",
       "3  16628               纸雕游戏大书  10.0     99.00元   重庆出版集团   \n",
       "4  19103         Michelangelo  10.0   $200.00   Taschen   \n",
       "\n",
       "                                         url  \n",
       "0   https://book.douban.com/subject/6053667/  \n",
       "1  https://book.douban.com/subject/26115807/  \n",
       "2   https://book.douban.com/subject/2235855/  \n",
       "3  https://book.douban.com/subject/26673804/  \n",
       "4   https://book.douban.com/subject/2342660/  "
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "book_pds.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "4a9d96ce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['id', 'name', 'rating', 'price', 'publish', 'url'], dtype='object')"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "book_pds.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "908b6ad7",
   "metadata": {},
   "outputs": [],
   "source": [
    "book_pd=book_df.groupBy('publish').count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "79545d08",
   "metadata": {},
   "outputs": [],
   "source": [
    "book_pd=book_pd.toPandas()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "d8036324",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "ef351440",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.\n",
      "findfont: Font family ['sans-serif'] not found. Falling back to DejaVu Sans.\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 19978 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 28023 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 25945 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 32946 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 22855 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 24187 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 22522 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 22320 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 20986 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 29256 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 20107 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 26989 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:238: RuntimeWarning: Glyph 37096 missing from current font.\n",
      "  font.set_text(s, 0.0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 19978 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 28023 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 25945 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 32946 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 22855 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 24187 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 22522 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 22320 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 20986 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 29256 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 20107 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 26989 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n",
      "/home/stark/.virtualenvs/spark/lib64/python3.6/site-packages/matplotlib/backends/backend_agg.py:201: RuntimeWarning: Glyph 37096 missing from current font.\n",
      "  font.set_text(s, 0, flags=flags)\n"
     ]
    },
    {
     "data": {
      "image/png": "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souI6MbnP/95tt9+e+bOnctBBx3E4sWL2XPPPdl+++3Za6+9+NWvfgXAK17xCr7ylbE9m9dfv+wTfNZZZ/H0pz+d/fbbj2222YYDDzwQ23zsYx/j+uuvZ4899mCPPfZY5TinkqiXAEts/6i5/RVK4o6IWG1dccUVvPe97+WMM87g0ksv5eijj+ZNb3oTL3/5y7nssss48MADOfjgg1f6OpdccglHHXUUV155JYsWLeLcc8/l4IMP5lGPehRnnnkmZ5656rujrTRR2/4tcJ2krZtDewFXrvKZIyI6dMYZZ7D//vuzySabAPDQhz6U888/n5e+9KUAHHTQQZxzznjbWy7vSU96EptuuilrrLEGO+ywA4sXL572WKc66+NNwPHNjI9FwCunPZKIiEqtueaa3H9/2eD9/vvv55577ll239prr73s+owZM7j33nun/fxTmkdte2HT/7y97efbvnXaI4mIaNGee+7JSSedxM033wzALbfcwm677caJJ54IwPHHH8/TnvY0oFQEXbBgAQAnn3wyS5cuXenrb7DBBtxxxx3TEmtWJkbESHrCE57A29/+dnbffXdmzJjBjjvuyDHHHMMrX/lKPvShDzFr1iyOO+44AF772tfyvOc9j7lz57L33nuz3nrrrfT158+fz957772sr3pVDGXPxHnz5rn2etSZnhfRnauuuorHP/7xXYfRmfG+f0kLbM8b7/GpnhcRUbkk6oiIyiVRR0RULok6IjoxjPGx1cGf830nUUdE62bOnMnNN988csm6V4965syZD+h5mZ4XEa3bdNNNWbJkCTfeeGPXobSut8PLA5FEHRGtW2uttR7QDiejLl0fERGVS6KOiKhcEnVEROWSqCMiKpdEHRFRuSTqiIjKJVFHRFQuiToionJJ1BERlUuijoioXBJ1RETlkqgjIiqXRB0RUbkk6oiIyiVRR0RULok6IqJyU9o4QNJi4A7gPuBe2/OGGVRERIx5IDu87GH7pqFFEhER40rXR0RE5abaojZwmiQD/2372MEHSJoPzAeYPXv29EX4F27O4aes8mssPnKfaYgkImo11Rb1U23vBDwbeIOkvx58gO1jbc+zPW/WrFnTGmRExCibUqK2/evm6w3A14EnDTOoiIgYs9JELWk9SRv0rgN/A1w+7MAiIqKYSh/1w4GvS+o9/ou2Tx1qVBERscxKE7Xt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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax=book_pd.head(n=10).plot(x='publish',y=['count'],kind='bar',title='book count of publish')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "435c7009",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
